<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>

    /*
    ### 闭包
        概念：一个函数对周围状态的引用捆绑在一起，内层函数中访问到其它外层函数的作用域
        闭包=内层函数+外层函数的变量 
    ### 闭包的作用
        封闭数据、提供操作，外部也可以访问函数内部的变量    
     */

    /*
     function father() {
        let a = 10
        function children() {
            console.log(a);
         }
          children()
        }
      father() 
    */

    /*function father() {
      const a = 10
      return function () {
        return a
      }
    }
    const result = father()
    console.log(result() + 10);*/


    /*
    全局变量有风险，容易造成全局变量污染
      let i = 0
      function fn() {
        i++
        console.log(`函数被调用了${i}次`);
      }
      fn()
      fn()
      fn()
      fn()
    */

    function father() {
      let i = 0
      return function () {
        i++
        return `函数被调用了${i}次`
      }
    }
    const res1 = father()
    console.log(res1());
    console.log(res1());
    console.log(res1());

  </script>
</body>

</html>